
#include "my_battery.h"
#include "sys_param.h"


BAT_PARAM_t bat_data = {0};


int battery_charge_sta_get(void)
{
    return bat_data.sta;
}



/*******
 * 电池电压 经过2个10k 1%电阻分压，接入到 BAT_ADC ，该脚位的电池电压为[vbat/2 = 0v~2.1v]
 * 
 * 
 * VREF = 3.0V, adc分辨率为12bit， 
 * 即 3.0v <----->4096
 * 
 * **/

void my_battery_status_check(void)
{
    // static uint8_t dc_5v_online_cnt = 0;
    // static uint8_t dc_5v_offline_cnt = 0;
    // static uint8_t charge_full_cnt = 0;

    // // // ---测试
    // // bat_data.sta = CHARG_FULL_STA;
    // // return ;
    // // //------


    // if(IS_5V_IN()){
    //     dc_5v_online_cnt ++;
    //     if(dc_5v_online_cnt > 10){      // 消抖
    //         dc_5v_online_cnt = 10;
    //         bat_data.sta = CHARGING_STA;
    //         if(IS_BAT_CHARGE_FULL()){
    //             charge_full_cnt ++;
    //             if(charge_full_cnt > 20){   // 消抖
    //                 charge_full_cnt = 20;
    //                 bat_data.sta = CHARG_FULL_STA;
    //             }
    //         }
    //     }
    //     dc_5v_offline_cnt = 0;
    // }
    // else{
    //     dc_5v_offline_cnt ++;

    //     if(dc_5v_offline_cnt > 10){
    //         dc_5v_offline_cnt = 10;
    //         if((CHARGING_STA == bat_data.sta)||(CHARG_FULL_STA == bat_data.sta)){
    //             bat_data.sta = IDLE_STA;
    //         }
    //     }
    //     dc_5v_online_cnt = 0;
    //     charge_full_cnt = 0;
    // }
}

/********
 * 冒泡排序法
 * 
 * 
*/
static void bubble_sort(int *arr, int size)  
{  
    int i, j, tmp;  
    int swap_times = 0;
    
    for (i = 0; i < size - 1; i++) 
    {  
        for (j = 0; j < size - i - 1; j++) 
        {  
            if (arr[j] > arr[j+1]){  
                tmp = arr[j];  
                arr[j] = arr[j+1];  
                arr[j+1] = tmp; 
                swap_times ++; 
            }
        }  
    }  
}  



static void my_battery_read(void)
{
	static int read_cnt = 0;
    if(bat_data.adc_buff_index >= ADC_BUFF_MAX_CNT){
       bubble_sort(bat_data.bat_adc_buff, ADC_BUFF_MAX_CNT); 
       bat_data.bat_voltage = bat_data.bat_adc_buff[ADC_BUFF_MAX_CNT/2] * 3000 *2/4096;
       bat_data.adc_buff_index = 0;
        read_cnt ++;
        if(0 == read_cnt%10)
        {
            printf("bat_adc:[%d],bat_vol:[%d]mV\r\n",bat_data.bat_adc_buff[ADC_BUFF_MAX_CNT/2], bat_data.bat_voltage);
        }
        set_sys_battery_voltage(bat_data.bat_voltage);
    }

   bat_data.bat_adc_buff[bat_data.adc_buff_index] = my_battery_adc_read();
   bat_data.adc_buff_index ++;
}


/*10ms扫描一次*/

void my_battery_scanf(void)
{
    my_battery_read();
}